#include <stdio.h>

//使用宏定义实现offsetof
//offsetof功能为计算结构体中某变量相对于首地址的偏移

struct S
{
    char c1;
    int i;
    char c2;
};

//强制转换0为结构体类型，指向的member即为成员，将地址强制转换为int型
#define OFFSETOF(type, member) (int*)&(((type*)0)->member)

int main()
{
    printf("%d\n", OFFSETOF(struct S,c1));
    printf("%d\n", OFFSETOF(struct S,i));
    printf("%d\n", OFFSETOF(struct S,c2));
    return 0;
}